Namespaces in ST: Deklaration

Syntax
NAMESPACE name
 
( * optional_begin *) USING Namespace_2;
USING Namespace_3; (* optional_end *)
 
(* user-defined declaration of POU and/or data types *)
 
END_NAMESPACE
Bedeutung

Deklaration eines →Namespaces, wobei name ein →IEC-Bezeichner (siehe unten Beispiel 1) oder ein voll qualifizierter Name sein muss
Ein voll qualifizierter Name besteht aus einer Reihe von Namespace-Bezeichnern, die durch . voneinander getrennt sind. Damit können Sie Namespaces verschachteln, ohne die Schlüsselwörter NAMESPACE ... END_NAMESPACE für jeden Namespace wiederholen zu müssen (siehe unten Beispiel 3).

Ein Namespace kann die folgenden Sprachelemente enthalten:

Zusätzlich ist es möglich, Namespaces (und darin die obigen Sprachelemente) in der ST-Schnittstelle eines C-/C++-Bausteins zu deklarieren.

Einschränkungen

  • Die →IEC-Norm führt für einen Namespace auch andere Sprachelemente an. Diese Elemente werden nicht unterstützt.

  • Zugriffsspezifikationen für Namespaces (z.B. INTERNAL) werden nicht unterstützt.

Falls Sie Sprachelemente in einem Namespace deklarieren, können Sie diese natürlich auch außerhalb dieses Namespaces verwenden.
(Info) Die USING-Namespace-Anweisung nach dem Namen des Funktionsbaustein ist optional. Sie dient dazu, auf die Sprachelemente des angegebenen Namespaces zuzugreifen (siehe "Namespaces in ST: Verwendung" für Details für diese Anweisung).
Beachten Sie: Falls Sie einen Namespace im Global-Objekt angeben, hat dieser Namespace keine Auswirkung auf den Zugriff dieser globalen Variablen über die zugehörige →externe Variable. Der Zugriff erfolgt nämlich über den Namen der Variable selbst. Also ist kein voll qualifizierter Name bzw. zusätzliche USING-Namespace-Anweisung bei einer externen Variablen erforderlich, falls auf eine globale Variable in einem Global-Objekt mit einem Namespace zugegriffen wird.

(Info) Ein Namespace kann auch beim Erstellen von bestimmten ST-Sprachelementen oder im Applikationsnavigator vorgegeben werden (siehe "Anwendung in ST erstellen" oder "Aktionen mit Ordner/Objekten in Zusammenhang mit Namespaces" für Details).

Beispiel 1: Deklaration eines Namespaces

NAMESPACE N1 (* starting the declaration of the namespace 'N1' *)
  FUNCTION F1
  // ... declaration
  END_FUNCTION
 
  TYPE
    T1: STRUCT
      Elem1 : BOOL;
      // ... and more declaration
    END_STRUCT;
  END_TYPE
 
  FUNCTION_BLOCK FB1
  // ... declaration
  END_FUNCTION_BLOCK
 
END_NAMESPACE (* ending the declaration of the namespace 'N1' *)
Beispiel 2: Deklaration von verschachtelten Namespaces (mit wiederholten Schlüsselwörtern)
NAMESPACE Standard (* starting the declaration of the namespace 'Standard' *)
  NAMESPACE Timers (* starting the declaration of the nested namespace 'Standard.Timers' *)
    NAMESPACE HighResolution (* starting the declaration of the nested namespace 'Standard.Timers.HighResolution' *)
 
      FUNCTION TimeTick: DWORD       (* 'TimeTick' is included in the namespace 'Standard.Timers.HighResolution'; compare examples 3 and 4. *)
      // ... declaration
      END_FUNCTION
 
    END_NAMESPACE (* ending the declaration of the nested namespace 'Standard.Timers.HighResolution' *)
 
    TYPE
      LOCAL_TIME: STRUCT
        Elem1 : BOOL;
        // ... and more declaration
      END_STRUCT;
    END_TYPE
 
    FUNCTION_BLOCK TON
      VAR_INPUT
        In : BOOL;
        PT : TIME;
      END_VAR
      // ...  and more declaration
    END_FUNCTION_BLOCK
 
  END_NAMESPACE (* ending the declaration of the nested namespace 'Standard.Timers' *)
  NAMESPACE Counters  (* starting the declaration of the nested namespace 'Standard.Counters' *)
    FUNCTION_BLOCK CUP
    // ... declaration
    END_FUNCTION_BLOCK
 
    FUNCTION_BLOCK CDOWN
    // ... declaration
    END_FUNCTION_BLOCK
  END_NAMESPACE (* ending the declaration of the nested namespace 'Standard.Counters' *)
 
END_NAMESPACE (* ending the declaration of the namespace 'Standard' *)

Beispiel 3: Deklaration eines verschachtelten Namespaces (mit einem voll qualifizierten Namen)

NAMESPACE Standard.Timers.HighResolution
 
  FUNCTION TimeResolution: DWORD      (* 'TimeResolution' is included in the namespace 'Standard.Timers.HighResolution'; compare examples 2 and 4. *)
  // ... declaration
  END_FUNCTION
END_NAMESPACE
Beispiel 4: Deklaration von verschachtelten Namespaces (Kombination aus Beispiel 2 und 3)
NAMESPACE Standard.Timers
 
  NAMESPACE HighResolution
 
    FUNCTION TimeLimit: DWORD       (* 'TimeLimit' is included in the namespace 'Standard.Timers.HighResolution'; compare examples 2 and 3. *)
    // ... declaration
    END_FUNCTION
 
  END_NAMESPACE
END_NAMESPACE